/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import clases.Persona;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Rafa
 */
public class DAO_Persona {

    Session sesion = null;

    public DAO_Persona() {
        this.sesion = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    public List<Persona> consultaPersonas(boolean iniciar) {
        List<Persona> listaPersonas = new ArrayList();
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se realiza la consulta
            Query q = sesion.createQuery("from Persona");

            //Se recoge el resultado de la consulta
            listaPersonas = (List<Persona>) q.list();
        } catch (Exception e) {
            e.printStackTrace();

        }
        return listaPersonas;
    }

    public Persona consultaPersona(String email, boolean iniciar) {
        Persona persona = null;
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se hace la consulta
            Query query = sesion.createQuery("from Persona where email = '" + email + "'");
        //query.setParameter("email", email);

            //Se recoge el resultado de la consulta
            persona = (Persona) query.uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();

        }
        return persona;
    }

//Se retorna la persona para poder crear un usuario a partir del usuario
    public Persona insertaPersona(String nombre, String apellidos, String email, String descripcion, boolean iniciar) {
        Persona persona = null;
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se crea la persona que tendra asociada el usuario
            persona = new Persona(nombre, apellidos, email, descripcion);

            sesion.save(persona);
            sesion.getTransaction().commit();

        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return persona;
    }

    public boolean eliminaPersona(String email, boolean iniciar) {
        boolean correcto = false;
        try {
            if (iniciar) {
                sesion.beginTransaction();
                sesion.delete(consultaPersona(email, false));
            } else {
                sesion.delete(consultaPersona(email, true));
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            sesion.getTransaction().commit();
            correcto = true;
        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return correcto;
    }

    /*Se pasa por parametros el email antiguo para saber que persona es y los
     parametros que se van a cambiar*/
    public boolean modificarPersona(String emailOld, String nombre, String apellidos,
            String email, boolean iniciar) {
        boolean correcto = false;
        try {
            Persona persona = null;
            if (iniciar) {
                sesion.beginTransaction();
                persona = consultaPersona(email, false);
            } else {
                persona = consultaPersona(email, true);
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            if (persona != null) {
                persona.setNombre(nombre);
                persona.setApellidos(apellidos);
                persona.setEmail(email);

                sesion.saveOrUpdate(persona);
                sesion.getTransaction().commit();
                correcto = true;
            }
        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return correcto;
    }

}
